/**
 * Navigation Timing API 为 web 应用访问完整的文档导航相关的时间信息定义了接口。
 * 
 *    精确地测量web应用的性能特征，是构建高性能web应用重要的一部分分。当前基于 JavaScript Date 对象
 * 可以实现一个测量用户等待时长的机制。多数情况下，这种方法不能提供精确详细的连续等待时长。
 * 
 *    本 API 定义了 PerformanceNavigationTiming 接口，该接口参与了 [PERFORMANCE-TIMELINE-2] 规范，
 * 用于存储和检索基于页面导航的高精度性能标准数据。这个接口使用了 [HR-TIME-2] 规范，测量的时间值全部基于 Window 对象的时间原点。
 * 比如：在导航跳转后100ms，请求响应完成，那么这个接口的数据型如：
 *    { startTime: 0.000, responseEnd: 100.000 }
 * startTime: 导航请求开始的时间。
 * responseEnd: 最近收到字节数据时的高精度时间值
 *    下面的示例展示了如何使用这个接口
 */
const [entry] = performance.getEntriesByType('navigation');
console.table(entry.toJSON());

/**
 * PerformanceNavigationTiming接口对 PerformanceEntry 接口做了以下属性的扩展：
 *    name: 获取当前文档地址字符串
 *    entryType: 固定值"navigation"
 *    startTime: 值为0的高精度时间戳(DOMHighResTimeStamp)
 *    duration: 值为 loadEventEnd 的时间和 startTime 之间的差值，也是一个高精度时间戳
 */

/**
 * PerformanceNavigationTiming 接口对 PerfomanceResourceTiming 接口做了以下扩展
 *    initiatorType: 固定值 "navigation"
 *    workerStart: 在UA执行服务代码前立即返回时间。需要发起服务请求，或者如果工作进程已经存在，那么在UA触发’fetch‘事件前立即返回。如果不存在工作进程，则返回0.
 */

/**
 * PerformanceNavigationTiming 接口 {
 *    unloadEventStart: {DOMHighResTimeStamp} 值为 UA 开始触发前一个文档的 unload 事件前的高精度时间戳。如果没有前一个文档，或者 timing allow check 算法未通过，则返回0
 *    unloadEventEnd: {DOMHighResTimeStamp} 值为前一个文档 unload 事件完成时的时间戳。如果没有前一个文档，或者 timing allow check 算法未通过，则返回0
 *    domInteractive: {DOMHighResTimeStamp} 值为 UA 将当前文档的就绪状态设置为“interactive”时的高精度时间戳
 *    domContentLoadedEventStart: {DOMHighResTimeStamp} 值为 ContentLoaded 事件开始执行前的高精度时间戳
 *    domContentLoadedEventEnd: {DOMHighResTimeStamp} 值为 ContentLoaded 事件执行完成时的高精度时间戳
 *    domComplete: {DOMHighResTimeStamp} 值为 UA 将当前文档就绪状态设置为 complete 状态时的高精度时间戳
 *    loadEventStart: {DOMHighResTimeStamp} 值为 load 事件触发前的高精度的时间戳，如果 load 事件还未触发则返回0
 *    loadEventEnd: {DOMHighResTimeStamp} 值为当前文档 load 事件完成时的高精度时间戳。如果 load 事件还未触发或者已经完成，则返回0
 *    type: {enum string NavigationType} 枚举，描述当前浏览器上下文中最近一次非重定向导航的类型
 *    redirectCount: {number} 当前浏览器上下文中，自最近一个非从定向导航开始，所有的重定向导航数
 *    toJSON: {Function} toJSON 函数默认行为
 * }
 * 导航类型枚举类型 NavigationType {
 *    'navigation': 最常见，通过点击 link、UA 地址条 URL 输入、表单提交或者通过脚本控制（除了 reload）
 *    'reload': 使用 location.reload() 方法执行导航
 *    'back_forward': 使用历史记录遍历操作导航
 *    'prerender': 预渲染暗示导航
 * }
 */